"""
认证相关的API路由
"""

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session

from database import get_db
from schemas.auth import UserLogin, UserRegister, Token, UserInfo, PasswordChange
from services.auth_service import AuthService
from utils.dependencies import get_current_active_user, get_current_admin_user
from models.user import User

router = APIRouter()


@router.post("/login", response_model=Token, summary="用户登录")
async def login(
    login_data: UserLogin,
    db: Session = Depends(get_db)
):
    """
    用户登录接口
    
    - **username**: 用户名
    - **password**: 密码
    
    返回访问令牌和用户信息
    """
    return AuthService.login(db, login_data)


@router.post("/register", response_model=UserInfo, summary="用户注册")
async def register(
    user_data: UserRegister,
    db: Session = Depends(get_db),
    current_admin: User = Depends(get_current_admin_user)
):
    """
    用户注册接口（仅管理员可用）
    
    - **username**: 用户名
    - **email**: 邮箱地址
    - **password**: 密码
    - **role**: 用户角色（admin/user）
    
    返回创建的用户信息
    """
    user = AuthService.create_user(db, user_data)
    return UserInfo.from_orm(user)


@router.get("/me", response_model=UserInfo, summary="获取当前用户信息")
async def get_current_user_info(
    current_user: User = Depends(get_current_active_user)
):
    """
    获取当前登录用户的信息
    
    需要有效的访问令牌
    """
    return UserInfo.from_orm(current_user)


@router.post("/change-password", summary="修改密码")
async def change_password(
    password_data: PasswordChange,
    current_user: User = Depends(get_current_active_user),
    db: Session = Depends(get_db)
):
    """
    修改当前用户密码
    
    - **old_password**: 旧密码
    - **new_password**: 新密码
    """
    AuthService.change_password(db, current_user.id, password_data)
    return {"message": "密码修改成功"}


@router.post("/logout", summary="用户登出")
async def logout(
    current_user: User = Depends(get_current_active_user)
):
    """
    用户登出接口
    
    注意：由于使用JWT，实际的登出需要在客户端删除令牌
    这个接口主要用于记录登出日志或执行其他清理操作
    """
    # 这里可以添加登出日志记录等操作
    return {"message": "登出成功"}


@router.get("/verify", response_model=UserInfo, summary="验证令牌")
async def verify_token(
    current_user: User = Depends(get_current_active_user)
):
    """
    验证访问令牌是否有效
    
    返回当前用户信息
    """
    return UserInfo.from_orm(current_user)
